solving programming problems